The present invention pertains to how the respective data stores on different devices, holding data items of one or more applications such as desktop calendars and e-mail, are synchronized. More particularly, the present invention concerns how the data structure of such data stores is synchronized.
Today it is possible for a businessperson to use an e-mail application and a calendar application (for keeping track of appointments) on a mobile phone or a palm (handheld) computer (or some other mobile terminal) and have an assistant use the same applications on a desktop computer to keep track of e-mail sent and received by the assistant on behalf of the businessperson, and to keep track of appointments for the businessperson. In such an arrangement, it is often the case that the data items (also called here data units) for the e-mail application and data items for the calendar are kept in a data store on the mobile phone and in another data store on the desktop. Thus, when changes are made to either of the data stores, each including data items for both the e-mail and the calendar application, the data stores need to be synchronized. In synchronizing respective data stores (i.e. synchronizing both the data items and data structure of the two data stores) used by two applications running on different equipment the contents of the two data stores are set to correspond to each other based on a protocol in which changes since a last synchronization are communicated, conflicts between changes made on both pieces of equipment are resolved (according to some policy), and changes are made to either the data items or their organization or both in one or both of the data stores.
A facility is being developed for synchronizing such data stores based on what is called SyncML (synchronization markup language), being developed under the so-called SyncML Initiative. (See SyncML Internet Website for information about SyncML, including standards and specifications for SyncML, and the SyncML Initiative, especially including the SyncML Representation Protocol and the SyncML Sync Protocol.) SyncML is an open industry standard for a common language for universal synchronization of remote data (i.e. data items stored in different equipment and so in different data stores) and personal information across multiple networks, platforms and devices. With SyncML, data items, but not yet data structure, can be synchronized on different devices connected via one or more interconnecting networks, including, for example, a Universal Mobile Telecommunications System (UMTS) Radio Access Network (UTRAN) and the Internet, where the communication may be wireless in whole or in part or may be wireline. Thus, the devices may communicate via, for example, fixed networks (including wireless networks), infrared, cable, or Bluetooth.
Besides being used to synchronize data stores, SyncML (i.e. the language) can be used for device management, and more particularly for transferring management actions between a client and a management server for the client. See SyncML Internet Website to find the specification, SyncML Device Management Protocol. SyncML Device Management Protocol allows management commands to be executed on management objects and it uses a package format similar to the SyncML Synchronization Protocol and the SyncML Representation Protocol. A management object might reflect a set of configuration parameters for a device. Actions that can be taken against this object might include reading and setting parameter keys and values. Another management object might be the run-time environment for software applications on a device. Actions that can be taken against this type of object might include installing, upgrading, or uninstalling software elements. Actions are represented by SyncML Device Management Protocol Commands, which are described in SyncML Representation Protocol, Device Management Usage. The commands and message structure used correspond identically to that of the SyncML Synchronization Protocol. (Thus, the so-called document type definition for the Management Protocol is the document type definition from SyncML Synchronization Protocol.)
Until now, the progress of mobile data synchronization has mostly been determined by restrictions. Data store synchronization has been based on a set of different, proprietary protocols, each functioning only with a very limited number of devices, systems and data types. These non-interoperable technologies have complicated the tasks of users, manufacturers, service providers, and developers. Further, a proliferation of different, proprietary data store synchronization protocols has placed barriers to the extended use of mobile devices, has restricted data access and delivery and limited the mobility of the users.
As the popularity of mobile computing and communications devices grows, users want access to updated information and applications wherever they are, and using whatever device is available, prompting a need for an open standard such as the SyncML standard.
SyncML uses the syntax of the so-called Extensible Markup Language (XML) as set out in Extensible Markup Language (XML) 1.0, a product of the World Wide Web Consortium (W3C) XML Activity
As used here, the terminology data item or data unit indicates a unit of data that is organized into what are here called folders that in turn make up what is here called a directory structure, also called here a data structure. Referring to FIG. 4, a directory structure is shown including various folders, each of which can include one or more data units.
The term directory structure or data structure and the term folder are to be understood broadly. First, a folder should be understood to be any container of data units. Thus, for example, what is called a folder in various operating systems (such as Windows, available from Microsoft Corporation) is to be understood by the term folder as used here, but so is a record in a table of a relational database, since a record in such a table includes fields, which are data units. Even such a field can be considered a folder, since a field contains characters, numbers, or other elements that can be considered data units, and thus each field is a folder.
The term directory structure or data structure indicates the arrangement of folders in the data store, such as for example a tree structure of folders in a directory maintained by an operating system, in which case the data units would be files. But the term directory structure or data structure should be understood to also encompass directory structures maintained internally by applications, i.e. not maintained by an operating system, but instead maintained by an application running under an operating system. An example is the directory structure maintained by most e-mail applications, which usually always include at least two folders: a received e-mail (in-box) folder and a transmitted e-mail (sent) folder. Moreover, the terminology directory structure or data structure should also be understood to encompass internal directory structures that are shared by different applications (so that the directory structure is not internal to only one application, but to several, usually well-interfaced applications, any of which can make changes to it). Further, the terminology directory structure or data structure should also be understood to encompass both system directory structures and internal directory structures. In the case of an internal directory maintained by an e-mail application, a data unit would be an e-mail, a kind of internal file. In a directory structure of either type, a folder can include, in general, data units that belong to different applications, and an application knows whether a data unit belongs to it or to another application based either on some attribute maintained in association with the data unit or based on the application keeping a private table of all data units that belong to it, wherever they may be located. Also, since as has already been explained, a folder can indicate for example a record in a table of a database or even a field within such a record, the terminology directory structure or data structure should also be understood to encompass even a database structure (when a folder is a record) or a record structure (when a folder is a field). It is important to understand that the term folder is thus used expansively, to indicate any container of data units, and the terminology directory structure or data structure has a correspondingly expansive meaning.
A user of an application can make changes to both the data units that belong to the application (such as adding a new data unit or replacing a data unit with an updated version because the user has used the application to change the contents of the data unit, and so on) as well as to how the data items are stored (such as adding a new folder and moving some data units from an already existing folder to the new folder), i.e. to both the data units as well as to the folders (i.e. the overall directory structure). According to the prior art for SyncML, however, if a user changes folders on a device, SyncML cannot be used to synchronize the data store on the device with a corresponding data store being maintained on another device; the prior art for SyncML allows only synchronizing with respect to changes in data units.
A SyncML message is a nested structure, and one or more SyncML messages can be associated with what is called a SyncML package. The SyncML Message is an individual XML document consisting of one or more elements each of one or more element types. The document consists of a header, specified by the SyncHdr element type, and a body, specified by the SyncBody element type. The SyncML header specifies routing and versioning information about the SyncML Message. The SyncML body is a container for one or more SyncML Commands. The SyncML Commands are specified by individual element types. The SyncML Commands act as containers for other element types that describe the specifics of the SyncML command, including any data or meta-information.
SyncML defines request commands and response commands. Request commands include, for example: add (a command that allows the originator to ask that one or more data units be added to data accessible to the recipient); alert (allowing the originator to notify the recipient of a condition; copy (allowing the originator to ask that one or more data units accessible to the recipient be copied); delete (allowing the originator to ask that one or more data units accessible to the recipient be deleted or archived); get (allowing the originator to ask for one or more data units from the recipient); and search (allowing the originator to ask that the supplied query be executed against one or more data units accessible to the recipient). The only response commands are currently: status (indicating the completion status of an operation or that an error occurred while processing a previous request); and results (used to return the data results of either a Get or Search SyncML Command).
SyncML uses identifiers to identify data units or folders. The identifiers are included in what are called the Source and Target element types, and can be a combination of Uniform Resource Identifiers (URIs), Uniform Resource Names (URNs), and textual names. (To indicate an International Mobile Equipment Identifier (IMEI), SyncML uses an IMEI URN type. The IMEI URN specifies a valid, 15 digit IMEI. In addition, SyncML uses the SyncML URN type to identify SyncML specific name spaces and unique names. Other URN types may also be used in the LocURI element type.)
As already mentioned, the SyncML representation protocol (i.e. a SyncML message) is a document mark-up consisting of XML element types. The element types are defined in terms of their purpose or usage, parent elements, any restrictions on content or use and content model. The element types include so-called common use elements, message container elements, data description elements, protocol management elements, and protocol command elements.
Common use element types are element types used by other SyncML element types, and include, for example, archive, for indicating that the data specified in a delete command should be archived by the recipient of the delete command, rather than simply deleted. Thus the delete command can use the archive common use element and so is referred to as the parent element of the archive common use element type, in this context. Another common use element type is the Cmd element type, which is used to specify the SyncML command referenced by a Status element type (and so the Status element type is the parent element in this context). Another is the CmdID element type, which is used to specify a SyncML message-unique command identifier, and can have various parent elements, including: Add, Alert, Atomic, Copy, Delete, Exec, Get, Map, Put, Replace, Results, Search, Sequence, Status, and Sync.
Of particular note in respect to the invention are the common element types LocName, LocURI, Source, and Target. LocName is used to specify the display name for the target or source address, and so can have as parent elements Target or Source. LocURI specifies the target or source specific address, and can also have as parent elements Target or Source. The common element type Source is used to specify source routing or mapping information; its parent elements include: Item, Map, MapItem, Search, Sync, and SyncHdr. Target is used to specify target routing or mapping information, and its Parent Elements include: Item, Map, MapItem, Search, Sync, and SyncHd.
Message container element types provide basic container support for SyncML messages. Three such element types are: SyncML, for specifying the container for a SyncML message, and having no parents since it is what is called a root or document element; SyncHdr, for specifying the container for the revisioning information or the routing information (or both) in the SyncML message, and having as a parent element a SyncML element; and SyncBody, for specifying the container for the body or contents of a SyncML message, and also having as a parent element a SyncML element.
Data description elements are used as container elements for data exchanged in a SyncML Message; data description elements include the following element types: Data, for specifying discrete SyncML data, and used by (parent elements) Alert, Cred, Item, Status, and Search element types; Item, for specifying a container for item data, and used by (parent elements) Add, Alert, Copy, Delete, Exec, Get, Put, Replace, Results, and Status; and Meta, for specifying meta-information about the parent element type, and used by (parent elements) Add, Atomic, Chal, Copy, Cred, Delete, Get, Item, Map, Put, Replace, Results, Search, Sequence, and Sync.
The protocol management elements include, at present, only the element type Status, for specifying the request status code for an indicated SyncML command, and used by (parent element) SyncBody.
Finally, there are the Protocol Command Elements. These include the command elements already mentioned, i.e. for example: Add, for specifying that data be added to a data collection, used by (parent elements) Atomic, Sequence, Sync, SyncBody; Delete; Replace; and so on.
All of the above element types are set out in the standard, SyncML Representation Protocol, available on the Internet at SyncML Website
Communicating changes in a directory structure is not problematic if the same application takes care of handling the data and handling the communication according to a synchronization protocol. But in case of the more general problem, in which on each device several applications share a data store organized as a directory structure, storing their respective data units in one or more of the folders of the directory structure, how best to arrange for synchronizing not only data units but also folders, i.e. how to structure a synchronization protocol for doing so, is not clear. According to the open standard, SyncML Synchronization Protocol, a product of the SyncML Initiative, each of two remote devices having respective data stores to be synchronized (in any respect), includes a synchronization (sync) agent (one per device, and so serving possibly many different applications) and one or more application entities, and following synchronization protocol (i.e. communicating according to the synchronization protocol set out in the standard) is the responsibility not of the applications, but of the sync agents. (Only the sync agent understands SyncML, not the applications.) But only the applications know whether a data unit has been changed since the most recent, already-performed synchronization. There are some options for how to extend the SyncML synchronization protocol that require including in each of the applications a knowledge of SyncML, like what is encoded in the sync agent, and some options that require the sync agent to be able to interpret data units the way the different applications do.
What is needed is a way for SyncML (or any analogous synchronization language) to refer to aspects of data organization, such as folders in a directory structure, in a way that minimizes the demands on the sync agent and application, and so avoids having to replicate code or folder information.
Accordingly, in a first aspect of the invention, a method is provided, for use by a first sync agent operative in association with a first data store and by a second sync (synchronization) agent operative in association with a second data store, by which the first data store is synchronized with the second data store, the data stores each being used for storing data as data units in folders by a first and second respective application distinct from the first and second sync agents, the folders in combination defining a data structure, the method comprising: a step in which the first and second sync agents establish a transport connection for enabling communication between the first and second sync agents; and a step in which the second sync agent communicates via the transport connection a message to the first sync agent, the message being expressed using a markup language and having at least one data identification element (the term data identification element being used here to indicate either what in SyncML is called a Target element or what in SyncML is called a Source element, but is to be understood to also encompass similar elements in any markup language similar to SyncML, so that the term data identification element stands in contradistinction to the term data element, which refers to an element in the SyncML or similar language that contains a data unit); wherein information about a change in the data structure of the first or second data store is transmitted in said message; and further wherein said information about a change in the data structure of the first or second data store is placed in the at least one data identification element.
In accord with the first aspect of the invention, the at least one data identification element may be external to, i.e. not contained in, a data element (i.e. a particular type of data description element of the SyncML markup language or a similar element of a similar markup language). Also in accord with the first aspect of the invention, the information about a change in the data structure of the first or second data store may include an identification of a folder. Also, the at least one data identification element may be either a target element or a source element. Still also, the data identification element may be contained in a protocol command element and the protocol command element in combination with the data identification element may indicate the information about a change in the data structure of the first or second data store. Still also, the data identification element may contain a so-called (in the markup language SyncML) LocURI element (or a similar element in a similar markup language) assigned by the second sync agent and the information about a change in the data structure of the first or second data store may be provided in the LocURI element.
Even still in accord with the first aspect of the invention, a first device may host the first sync agent as well as the first data store and the first application and a second device may host the second sync agent and also the second data store and the second application. Further, the first device may function as a client in a client/server protocol and the second device may function as a server in the client/server protocol, and the message may be provided by the client to the server. Also further, the first device may function as a server in a client/server protocol and the second device as a client in the client/server protocol, and the message may be provided by the server to the client, and the step of communicating the message may be responsive to a client message and may (also) include resolving any conflicts posed by the client message in respect to the data store hosted by the server.
Yet even still in accord with the first aspect of the invention, the first application may be responsive to any data element included in the message and the first sync agent may be responsive to the data identification element and may make changes to the data structure of the first data store based on the information conveyed by the data identification element before the first application makes any changes to the data units of the data store based on information conveyed by any data elements included in the message. Also, the second sync agent may provide in the data identification element the information about a change in the data structure of the first or second data store and the second application may provide in a data element information about a change in data units in the first or second data store. Still also, the first sync agent, in response to the message, may extract the information about a change in the data structure from the data identification element and may provide the information to either a sync engine or to an application entity.
In a second aspect of the invention, a device is provided operative according to the first aspect of the invention in respect to the operation of the first device and also in respect to the operation of the second device. In accord with the second aspect of the invention, the device may be a wireless communication terminal. Also, the device may instead be a wireline communication terminal. Still also, the device may function as a server in a client server model and may include a sync engine for resolving conflicts posed by the message.
In a third aspect of the invention, a system is provided comprising a first device as in the second aspect of the invention, wherein the first device functions as a server in a client server model and includes a sync engine for resolving conflicts posed by the message, and also comprising a second device in the second aspect of the invention, wherein the second device functions as a client in the client server model.
In a fourth aspect of the invention, a computer program is provided for indicating operating instructions for a telecommunications device (1112) so that the telecommunications device (1112) is operative according to the first aspect of the invention in respect to the first device and also in respect to the second device.
In a fifth aspect of the invention, a computer program is provided for indicating operating instructions to a sync agent so that the sync agent is operative according to the first aspect of the invention in respect to the first sync agent and also in respect to the second sync agent.
Thus, the invention extends SyncML so as to provide a way to synchronize data stores for changes in folders, data stores that can be used by applications in connection either with user data or with device management; now both changes in folders and changes in data units in one data store can be reflected in another data store.
The invention has the advantage of not requiring that each application on a device be encoded so as to understand SyncML, but only to interface with the sync agent for the device and, on a server, the sync engine. In addition, the invention avoids having to include in the sync agent on each device any knowledge of how to interpret data units for the different applications sharing the data store being synchronized with a corresponding data store on another device.